#include <stdio.h>

int main()
{
	//7.隐式数据类型转换——————————长 赋予 短
	unsigned short us = -1;	//先把short复制过去到低位，高位在补0，-1默认int型
	unsigned int ui;
	short ss;
	printf("%hu,%hd\n",us,us);//输出 65535，-1，即以无符号，和有符号分别输出
	//当前-1=1111 1111 1111 1111，输出无符号：1111 1111 1111 1111=65535 有符号型式输出:1111 1111 1111 1111 = -1



	//8.隐式数据类型转换——————————无符号短 赋予 长
	ui = us;//先把短的给到长的低位 后补0
	printf("%u,%d\n",ui,ui);//以无符号输出 0000 0000 0000 0000 1111 1111 1111  1111 输出结果为65535
	//以有符号输出 0000 0000 0000 0000 1111 1111 1111 1111 =65535  



	//9.隐式数据类型转换——————————带符号短 赋予 长，如果短的是自然数（大于等于0）则从高位补0，否则高位补1
	ss = -1;//ss = 1111 1111 1111 1111
	ui = ss;//ui = 1111 1111 1111 1111 1111 1111 1111 1111
	printf("%u,%d\n",ui,ui);//以无符号输出：把32个1当作无符号直接输出为4294957296，以有符号数输出则直接判断为-1

	ss = 1; //ss=0000 0000 0000 0001
	ui = ss;//ui = 0000 0000 0000 0000 0000 0000 0000 0001
	printf("%u,%d\n",ui,ui);//以无符号输出：直接为1，以有符号输出：直接判断在正数范围下 数值是1



	//10.隐式数据类型转换————等长，则保留原有补码直接输出
	ui = -1;
	printf("%u\n",ui);//结果为4294957296，


	//11.显式数据类型转换
	printf("%u,%ld,%lu\n",1U,1L,1UL);//U是无符号int   L是long  UL是无符号long


	//12.强制类型转换
	printf("%hu,%d\n",(unsigned short)-1,(int)ui);//格式  （转换类型）数据或变量（）括号在此处代表强制转换符

	return 0;
}